/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.vdab.util.mens;

import java.io.Serializable;
import java.lang.String;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.Set;
import java.util.TreeSet;

/**
 *
 * @author Joris.Lefever
 */
public class Mens implements Comparable,Serializable {

    private String naam;
    private Enum rijbewijs;
    private EnumSet<Rijbewijs> rijbewijzen;
    private Rijbewijs[] rbz, rijbewijzenArray, testFile;
    private String melding = "";
    private Set<Rijbewijs> mySet;

    public Mens(String naam) {
        setNaam(naam);
        this.rijbewijzen = null;
    }

    public Mens(String naam, Rijbewijs... rbz) {
        setNaam(naam);
        mySet = new TreeSet<>(Arrays.asList(rbz));
        this.rbz = mySet.toArray(new Rijbewijs[mySet.size()]);
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public String getNaam() {
        return this.naam;
    }
 
    public Rijbewijs[] getRijbewijs() {
        return this.rbz;
    }

    @Override
    public final String toString() {
        if (getRijbewijs() == null)
            return getNaam();
        else
            melding = "";
            for(Rijbewijs elements:getRijbewijs())
                melding += " " + elements + ",";
            return getNaam() + "(" + melding.substring(1,melding.length()-1) + ")";
    }

    @Override
    public boolean equals(Object o) {
        if (o == null) {
            return false;
        } else if (o instanceof Mens) {
            Mens m = (Mens) o;
            if (getNaam().equals(m.getNaam())) {
                if (Arrays.equals(getRijbewijs(),m.getRijbewijs()))
                    return true;
                else
                    return false;
            } else {
                return false;
            }
        } else {
            return false;
        }

    }

    @Override
    public int hashCode() {
        return toString().hashCode();
    }

    @Override
    public int compareTo(Object o) {
        if (o == null) {
            throw new NullPointerException();
        } else {
            Mens m = (Mens) o;
            if (getNaam().compareTo(m.getNaam()) > 0) {
                return 1;
            } else {
                if (getNaam().compareTo(m.getNaam()) < 0) {
                    return -1;
                } else {
                    return 0;
                }
            }
        }
    }
}
